#pragma once 
#include<string>
#include<set>
#include<cstdio>
#include"inetAdder.hpp"
class Command
{
    public:
    Command()
    {
        _whitecommand.insert("ls -l");
        _whitecommand.insert("pwd");
        _whitecommand.insert("ls -l");
        _whitecommand.insert("ls -l");
        _whitecommand.insert("ls -l");
        _whitecommand.insert("ls -l");

    }
    bool isasafecommand(std::string cmd)
    {
        // for(auto iter:_whitecommand)
        // {
        //     if(cmd==iter)
        //     {
        //         return true;
        //     }
        // }
        // return false;
        //老师的写法
        auto iter = _whitecommand.find(cmd);
        return iter != _whitecommand.end();
    }
    std::string Excute(std::string cmd,inetaddr& addr)
    {
        //判断白名单中是否有我们对应的命令
        if(!isasafecommand(cmd))
        {
            return std::string("fail to excute unsafe command")+=cmd;
        }
        //执行命令
        FILE *fp = popen(cmd.c_str(),"r");
        if(fp == nullptr)
        {
            return "fail to excute Nonexistent command:"+cmd;
        }
        std::string result;//用于接收执行结果
        char buffer[1024];
        while(fgets(buffer,sizeof(buffer),fp))
        {
            result+=buffer;
        }
        pclose(fp);
        return result;
    }
    private:
    std::set<std::string> _whitecommand;//命令白名单
};